Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / vendor / lxmfy / tests / test_performance.py

Displaying Raw • Download


vendor/lxmfy/tests/test_performance.py dev (8f381c86) Text, 8.17 KB

T8b949e"""Performance and stress tests for LXMFy."""

Tff7b72import T7ee787os
Tff7b72import T7ee787time
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3MagicMockTb4b4b4, Te6edf3patch

Tff7b72import T7ee787LXMF
Tff7b72import T7ee787psutil
Tff7b72import T7ee787pytest
Tff7b72import T7ee787RNS

Tff7b72from T7ee787lxmfy Tff7b72import Te6edf3BotConfigTb4b4b4, Te6edf3LXMFBot
Tff7b72from T7ee787lxmfyT7ee787.T7ee787middleware Tff7b72import Te6edf3MiddlewareType


Tff7b72def Td2a8ffget_memory_usageTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Get current memory usage in MB."""
Te6edf3process Tff7b72= Te6edf3psutilTff7b72.Td2a8ffProcessTb4b4b4(Te6edf3osTff7b72.Td2a8ffgetpidTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3processTff7b72.Td2a8ffmemory_infoTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffrss Tff7b72/ Tb4b4b4(T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4)


Tff7b72class T56d364TestPerformanceTb4b4b4:
T8b949e"""Stress tests for LXMFy."""

Tf0883e@pytestTff7b72.Td2a8fffixture
Tff7b72def Td2a8ffstress_botTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3test_config_dirTb4b4b4)Tb4b4b4:
T8b949e"""Create a bot configured for stress testing."""
Te6edf3config Tff7b72= Te6edf3BotConfigTb4b4b4(
Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffStressBotTa5d6ff"Tb4b4b4,
Te6edf3test_modeTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3storage_pathTff7b72=Tffa657strTb4b4b4(Te6edf3test_config_dir Tff7b72/ Ta5d6ff"Ta5d6ffstress_storageTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3signature_verification_enabledTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3require_message_signaturesTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3rate_limitTff7b72=T79c0ff10000Tb4b4b4, T8b949e# High limit for testing
Te6edf3cooldownTff7b72=T79c0ff1Tb4b4b4,
Te6edf3cogs_enabledTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3first_message_enabledTff7b72=Tff7b72FalseTb4b4b4, T8b949e# Disable first message handling for performance tests
Tb4b4b4)
Te6edf3bot Tff7b72= Te6edf3LXMFBotTb4b4b4(Tff7b72*Tff7b72*Te6edf3configTff7b72.Td2a8ff__dict__Tb4b4b4)
T8b949e# Mock some components to avoid RNS overhead in performance tests
Te6edf3botTff7b72.Td2a8ffrouter Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8fflocal Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8fflocalTff7b72.Td2a8ffhash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6fflocal_identity_hashTa5d6ff"
Tff7b72return Te6edf3bot

Tff7b72def Td2a8fftest_message_processing_floodTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3stress_botTb4b4b4)Tb4b4b4:
T8b949e"""Flood the bot with messages to test processing throughput."""
Te6edf3message_count Tff7b72= T79c0ff10000 T8b949e# Increased to 10k
Te6edf3messages Tff7b72= Tb4b4b4[Tb4b4b4]

Te6edf3processed_count Tff7b72= T79c0ff0

Tff7b72def Td2a8ffcount_handlerTb4b4b4(Te6edf3senderTb4b4b4, Te6edf3msgTb4b4b4)Tb4b4b4:
Tff7b72nonlocal Te6edf3processed_count
Te6edf3processed_count Tff7b72+Tff7b72= T79c0ff1
Tff7b72return Tff7b72True

Te6edf3stress_botTff7b72.Td2a8ffmessage_handlersTff7b72.Td2a8ffappendTb4b4b4(Te6edf3count_handlerTb4b4b4)

T8b949e# Pre-generate messages
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Te6edf3message_countTb4b4b4)Tb4b4b4:
Te6edf3mock_msg Tff7b72= Te6edf3MagicMockTb4b4b4(Te6edf3specTff7b72=Te6edf3LXMFTff7b72.Td2a8ffLXMessageTb4b4b4)
Te6edf3mock_msgTff7b72.Td2a8ffcontent Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffStress test message Tffd700{Te6edf3iTffd700}Ta5d6ff"Tff7b72.Td2a8ffencodeTb4b4b4(Tb4b4b4)
Te6edf3mock_msgTff7b72.Td2a8fftitle Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffTitle Tffd700{Te6edf3iTffd700}Ta5d6ff"Tff7b72.Td2a8ffencodeTb4b4b4(Tb4b4b4)
Te6edf3mock_msgTff7b72.Td2a8ffsource_hash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffsource_Ta5d6ff" Tff7b72+ Tffa657strTb4b4b4(Te6edf3i Tff7b72% T79c0ff10Tb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffrjustTb4b4b4(T79c0ff10Tb4b4b4, Ta5d6ffbTa5d6ff"Ta5d6ff0Ta5d6ff"Tb4b4b4)
Te6edf3mock_msgTff7b72.Td2a8ffdestination_hash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6fflocal_identity_hashTa5d6ff"
Te6edf3mock_msgTff7b72.Td2a8ffhash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffhash_Ta5d6ff" Tff7b72+ Te6edf3osTff7b72.Td2a8ffurandomTb4b4b4(T79c0ff16Tb4b4b4)
Te6edf3mock_msgTff7b72.Td2a8fffields Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3mock_msgTff7b72.Td2a8ffsignature_validated Tff7b72= Tff7b72True
Te6edf3messagesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3mock_msgTb4b4b4)

Te6edf3start_mem Tff7b72= Te6edf3get_memory_usageTb4b4b4(Tb4b4b4)
Te6edf3start_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)

T8b949e# Simulate receiving messages
Tff7b72for Te6edf3msg Tff7b72in Te6edf3messagesTb4b4b4:
Te6edf3stress_botTff7b72.Td2a8ff_message_receivedTb4b4b4(Te6edf3msgTb4b4b4)

Te6edf3duration Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3start_time
Te6edf3end_mem Tff7b72= Te6edf3get_memory_usageTb4b4b4(Tb4b4b4)

Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Tffea00\nTa5d6ff[Performance] Processed Tffd700{Te6edf3message_countTffd700}Ta5d6ff messages in Tffd700{Te6edf3durationTffd700:Ta5d6ff.4fTffd700}Ta5d6ffsTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff[Performance] Throughput: Tffd700{Te6edf3message_count Tff7b72/ Te6edf3durationTffd700:Ta5d6ff.2fTffd700}Ta5d6ff msg/sTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff[Performance] Memory delta: Tffd700{Te6edf3end_mem Tff7b72- Te6edf3start_memTffd700:Ta5d6ff.2fTffd700}Ta5d6ff MBTa5d6ff"Tb4b4b4)

T8b949e# Verify all messages were processed
Tff7b72assert Te6edf3processed_count Tff7b72== Te6edf3message_count
Tff7b72assert Te6edf3duration Tff7b72< T79c0ff2.0 T8b949e# Should be very fast in test mode

Tff7b72def Td2a8fftest_signature_verification_stressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3stress_botTb4b4b4)Tb4b4b4:
T8b949e"""Test performance of signature verification logic."""
Te6edf3sig_manager Tff7b72= Te6edf3stress_botTff7b72.Td2a8ffsignature_manager
Te6edf3identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Tb4b4b4)
Te6edf3sender_hash Tff7b72= Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3identityTff7b72.Td2a8ffhashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)

T8b949e# Pre-generate a signed message
Te6edf3mock_msg Tff7b72= Te6edf3MagicMockTb4b4b4(Te6edf3specTff7b72=Te6edf3LXMFTff7b72.Td2a8ffLXMessageTb4b4b4)
Te6edf3mock_msgTff7b72.Td2a8ffcontent Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffPerformance test contentTa5d6ff"
Te6edf3mock_msgTff7b72.Td2a8fftitle Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffPerformance test titleTa5d6ff"
Te6edf3mock_msgTff7b72.Td2a8ffsource_hash Tff7b72= Te6edf3identityTff7b72.Td2a8ffhash
Te6edf3mock_msgTff7b72.Td2a8ffdestination_hash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffdestTa5d6ff"
Te6edf3mock_msgTff7b72.Td2a8fffields Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3mock_msgTff7b72.Td2a8fftimestamp Tff7b72= Tffa657intTb4b4b4(Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)

T8b949e# Our signature logic uses _canonicalize_message
Te6edf3signature Tff7b72= Te6edf3sig_managerTff7b72.Td2a8ffsign_messageTb4b4b4(Te6edf3mock_msgTb4b4b4, Te6edf3identityTb4b4b4)

Te6edf3iteration_count Tff7b72= T79c0ff5000 T8b949e# Increased to 5k
Te6edf3start_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)

T8b949e# Patch where it is USED, which is lxmfy.signatures
Tff7b72with Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6fflxmfy.signatures.RNS.Identity.recallTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Te6edf3identityTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3_ Tff7b72in Tffa657rangeTb4b4b4(Te6edf3iteration_countTb4b4b4)Tb4b4b4:
Te6edf3sig_managerTff7b72.Td2a8ffverify_message_signatureTb4b4b4(Te6edf3mock_msgTb4b4b4, Te6edf3signatureTb4b4b4, Te6edf3sender_hashTb4b4b4)

Te6edf3duration Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3start_time
Tffa657printTb4b4b4(
Ta5d6fffTa5d6ff"Tffea00\nTa5d6ff[Performance] Verified Tffd700{Te6edf3iteration_countTffd700}Ta5d6ff signatures in Tffd700{Te6edf3durationTffd700:Ta5d6ff.4fTffd700}Ta5d6ffsTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tffa657printTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ff[Performance] Avg verification time: Tffd700{Tb4b4b4(Te6edf3duration Tff7b72/ Te6edf3iteration_countTb4b4b4) Tff7b72* T79c0ff1000Tffd700:Ta5d6ff.4fTffd700}Ta5d6ffmsTa5d6ff"Tb4b4b4,
Tb4b4b4)

Tff7b72assert Te6edf3duration Tff7b72< T79c0ff5.0

Tff7b72def Td2a8fftest_storage_extreme_loadTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3stress_botTb4b4b4)Tb4b4b4:
T8b949e"""Test storage performance under heavy load."""
Te6edf3storage Tff7b72= Te6edf3stress_botTff7b72.Td2a8ffstorage
Te6edf3record_count Tff7b72= T79c0ff10000 T8b949e# Increased to 10k

Te6edf3start_mem Tff7b72= Te6edf3get_memory_usageTb4b4b4(Tb4b4b4)
Te6edf3start_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)

T8b949e# Write load
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Te6edf3record_countTb4b4b4)Tb4b4b4:
Te6edf3storageTff7b72.Td2a8ffsetTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffkey_Tffd700{Te6edf3iTffd700}Ta5d6ff"Tb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffvalueTa5d6ff" Tff7b72* T79c0ff10Tb4b4b4, Ta5d6ff"Ta5d6ffindexTa5d6ff"Tb4b4b4: Te6edf3iTb4b4b4}Tb4b4b4)

Te6edf3write_duration Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3start_time

T8b949e# Read load
Te6edf3read_start Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Te6edf3record_countTb4b4b4)Tb4b4b4:
Te6edf3storageTff7b72.Td2a8ffgetTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffkey_Tffd700{Te6edf3iTffd700}Ta5d6ff"Tb4b4b4)
Te6edf3read_duration Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3read_start

Te6edf3end_mem Tff7b72= Te6edf3get_memory_usageTb4b4b4(Tb4b4b4)

Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Tffea00\nTa5d6ff[Performance] Storage Tffd700{Te6edf3record_countTffd700}Ta5d6ff records:Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ff[Performance] Write time: Tffd700{Te6edf3write_durationTffd700:Ta5d6ff.4fTffd700}Ta5d6ffs (Tffd700{Te6edf3record_count Tff7b72/ Te6edf3write_durationTffd700:Ta5d6ff.2fTffd700}Ta5d6ff ops/s)Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Tffa657printTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ff[Performance] Read time: Tffd700{Te6edf3read_durationTffd700:Ta5d6ff.4fTffd700}Ta5d6ffs (Tffd700{Te6edf3record_count Tff7b72/ Te6edf3read_durationTffd700:Ta5d6ff.2fTffd700}Ta5d6ff ops/s)Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff[Performance] Memory delta: Tffd700{Te6edf3end_mem Tff7b72- Te6edf3start_memTffd700:Ta5d6ff.2fTffd700}Ta5d6ff MBTa5d6ff"Tb4b4b4)

Tff7b72assert Te6edf3write_duration Tff7b72< T79c0ff10.0
Tff7b72assert Te6edf3read_duration Tff7b72< T79c0ff5.0

Tff7b72def Td2a8fftest_heavy_middleware_loadTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3stress_botTb4b4b4)Tb4b4b4:
T8b949e"""Test impact of multiple middlewares on message processing."""
T8b949e# Add multiple dummy middlewares
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(T79c0ff10Tb4b4b4)Tb4b4b4:

Tff7b72def Td2a8ffmake_middlewareTb4b4b4(Te6edf3idxTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffmwTb4b4b4(Te6edf3ctxTb4b4b4)Tb4b4b4:
Te6edf3ctxTff7b72.Td2a8ffdataTb4b4b4[Ta5d6fffTa5d6ff"Ta5d6ffmw_Tffd700{Te6edf3idxTffd700}Ta5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72return Te6edf3ctx

Tff7b72return Te6edf3mw

Te6edf3stress_botTff7b72.Td2a8ffmiddlewareTff7b72.Td2a8ffregisterTb4b4b4(Te6edf3MiddlewareTypeTff7b72.Td2a8ffPRE_EVENTTb4b4b4, Te6edf3make_middlewareTb4b4b4(Te6edf3iTb4b4b4)Tb4b4b4)

Te6edf3message_count Tff7b72= T79c0ff500

Te6edf3processed_count Tff7b72= T79c0ff0

Tff7b72def Td2a8ffcount_handlerTb4b4b4(Te6edf3senderTb4b4b4, Te6edf3msgTb4b4b4)Tb4b4b4:
Tff7b72nonlocal Te6edf3processed_count
Te6edf3processed_count Tff7b72+Tff7b72= T79c0ff1
Tff7b72return Tff7b72True

Te6edf3stress_botTff7b72.Td2a8ffmessage_handlersTff7b72.Td2a8ffappendTb4b4b4(Te6edf3count_handlerTb4b4b4)

Te6edf3start_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Te6edf3message_countTb4b4b4)Tb4b4b4:
Te6edf3mock_msg Tff7b72= Te6edf3MagicMockTb4b4b4(Te6edf3specTff7b72=Te6edf3LXMFTff7b72.Td2a8ffLXMessageTb4b4b4)
Te6edf3mock_msgTff7b72.Td2a8ffcontent Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffmiddleware testTa5d6ff"
Te6edf3mock_msgTff7b72.Td2a8ffsource_hash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffsourceTa5d6ff"
Te6edf3mock_msgTff7b72.Td2a8ffdestination_hash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6fflocalTa5d6ff"
Te6edf3mock_msgTff7b72.Td2a8ffhash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffhash_Ta5d6ff" Tff7b72+ Tffa657strTb4b4b4(Te6edf3iTb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Tb4b4b4)
Te6edf3mock_msgTff7b72.Td2a8fffields Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3mock_msgTff7b72.Td2a8ffsignature_validated Tff7b72= Tff7b72True
Te6edf3stress_botTff7b72.Td2a8ff_message_receivedTb4b4b4(Te6edf3mock_msgTb4b4b4)

Te6edf3duration Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3start_time
Tffa657printTb4b4b4(
Ta5d6fffTa5d6ff"Tffea00\nTa5d6ff[Performance] Middleware (10 layers) x Tffd700{Te6edf3message_countTffd700}Ta5d6ff msgs: Tffd700{Te6edf3durationTffd700:Ta5d6ff.4fTffd700}Ta5d6ffsTa5d6ff"Tb4b4b4,
Tb4b4b4)

Tff7b72assert Te6edf3processed_count Tff7b72== Te6edf3message_count
Tff7b72assert Te6edf3duration Tff7b72< T79c0ff2.0

Tff7b72def Td2a8fftest_memory_stability_long_runTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3stress_botTb4b4b4)Tb4b4b4:
T8b949e"""Run bot for a period to check for memory leaks."""
Te6edf3duration_seconds Tff7b72= T79c0ff5
Te6edf3start_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3start_mem Tff7b72= Te6edf3get_memory_usageTb4b4b4(Tb4b4b4)

Te6edf3message_count Tff7b72= T79c0ff0
Te6edf3mock_msg Tff7b72= Te6edf3MagicMockTb4b4b4(Te6edf3specTff7b72=Te6edf3LXMFTff7b72.Td2a8ffLXMessageTb4b4b4)
Te6edf3mock_msgTff7b72.Td2a8ffcontent Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffstability testTa5d6ff"
Te6edf3mock_msgTff7b72.Td2a8ffsource_hash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffsourceTa5d6ff"
Te6edf3mock_msgTff7b72.Td2a8ffdestination_hash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6fflocalTa5d6ff"
Te6edf3mock_msgTff7b72.Td2a8fffields Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3mock_msgTff7b72.Td2a8ffsignature_validated Tff7b72= Tff7b72True

Tff7b72while Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3start_time Tff7b72< Te6edf3duration_secondsTb4b4b4:
Te6edf3mock_msgTff7b72.Td2a8ffhash Tff7b72= Te6edf3osTff7b72.Td2a8ffurandomTb4b4b4(T79c0ff16Tb4b4b4)
Te6edf3stress_botTff7b72.Td2a8ff_message_receivedTb4b4b4(Te6edf3mock_msgTb4b4b4)
Te6edf3message_count Tff7b72+Tff7b72= T79c0ff1

Te6edf3end_mem Tff7b72= Te6edf3get_memory_usageTb4b4b4(Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff[Performance] Stability run (5s):Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff[Performance] Total messages: Tffd700{Te6edf3message_countTffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff[Performance] Start memory: Tffd700{Te6edf3start_memTffd700:Ta5d6ff.2fTffd700}Ta5d6ff MBTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff[Performance] End memory: Tffd700{Te6edf3end_memTffd700:Ta5d6ff.2fTffd700}Ta5d6ff MBTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff[Performance] Memory delta: Tffd700{Te6edf3end_mem Tff7b72- Te6edf3start_memTffd700:Ta5d6ff.2fTffd700}Ta5d6ff MBTa5d6ff"Tb4b4b4)

T8b949e# Stability check: Memory shouldn't grow boundlessly
T8b949e# We allow some growth for caches but not massive
Tff7b72assert Tb4b4b4(Te6edf3end_mem Tff7b72- Te6edf3start_memTb4b4b4) Tff7b72< T79c0ff10.0


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────